package com.chy.utilsdemo.tiyu;


import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.util.Arrays;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;

/**
 * 功能： //TODO
 * <p>
 * ──────────────────────────────────────────
 * version  变更日期    修改人    修改说明
 * ------------------------------------------
 * V1.0.0      kecz     初版
 * ──────────────────────────────────────────
 */
@Slf4j
public final class SignUtil {

    private SignUtil() {

    }

    public static String signBySM3(Map<String, String> params, String appSecret) {
        return SMUtils.sm3(buildOrderString(params), appSecret);
    }

    /**
     * 根据参数key记性升序排序
     *
     * @param params 排序参数
     * @return 构建结果
     */
    public static String buildOrderString(Map<String, String> params) {
        TreeMap<String, String> sortedMap = new TreeMap<String, String>(params);
        String result = sortedMap.entrySet().stream()
                .filter(entry -> areNotEmpty(entry.getKey(), entry.getValue()))
                .map(entry -> entry.getKey() + "=" + entry.getValue())
                .collect(Collectors.joining("&"));
        log.debug("concat string ->:{}", result);
        return result;
    }

    /**
     * 校验当前参数是否都不为空
     *
     * @param values 参数列表
     * @return 是否为空
     */
    private static boolean areNotEmpty(String... values) {
        return Arrays.stream(values).allMatch(StringUtils::isNotBlank);
    }
}
